package com.wang.springbootinit.service.impl;

import com.wang.springbootinit.exception.BusinessException;
import com.wang.springbootinit.service.FileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Service
@Slf4j
public class FileServiceImpl implements FileService {
    
    @Value("${file.upload.path}")
    private String uploadPath;
    
    @Value("${file.access.path}")
    private String accessPath;
    
    @Override
    public String uploadFile(MultipartFile file) {
        if (file.isEmpty()) {
            throw new BusinessException("文件为空");
        }

                // 获取文件类型
        String contentType = file.getContentType();
        if (contentType == null || !contentType.startsWith("video/")) {
            throw new BusinessException("只支持视频文件上传");
        }
        
        // 获取原始文件名
        String originalFilename = file.getOriginalFilename();
        // 生成新的文件名
        String fileName = UUID.randomUUID().toString() + 
            originalFilename.substring(originalFilename.lastIndexOf("."));
            
        // 创建目标文件
        File dest = new File(uploadPath + fileName);
        
        // 确保目录存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        
        try {
            // 保存文件
            file.transferTo(dest);
            // 返回可访问的URL
            return accessPath + fileName;
        } catch (IOException e) {
            log.error("文件上传失败", e);
            throw new BusinessException("文件上传失败");
        }
    }

    @Override
    public boolean deleteFile(String fileUrl) {
        if (fileUrl == null || fileUrl.isEmpty()) {
            throw new BusinessException("文件地址不能为空");
        }
        
        // 从文件URL中获取文件名
        String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
        // 构建完整的文件路径
        File file = new File(uploadPath + fileName);
        
        // 检查文件是否存在
        if (!file.exists()) {
            log.warn("要删除的文件不存在: {}", fileUrl);
            return false;
        }
        
        // 尝试删除文件
        boolean deleted = file.delete();
        if (!deleted) {
            log.error("文件删除失败: {}", fileUrl);
            throw new BusinessException("文件删除失败");
        }
        
        return true;
    }
}